// 数据库初始化脚本

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const dotenv = require('dotenv');
const User = require('../models/User');

// 加载环境变量
dotenv.config();

/**
 * 初始化管理员账号
 */
const initAdminUser = async () => {
  try {
    // 检查是否已存在管理员账号
    const existingAdmin = await User.findOne({ role: 'admin' });
    if (existingAdmin) {
      console.log('删除现有管理员账号...');
      await User.deleteOne({ role: 'admin' });
    }

    // 创建默认管理员账号
    const hashedPassword = await bcrypt.hash('123456', 10);
    const adminUser = new User({
      account: 'admin', // 账号
      password: hashedPassword, // 直接使用加密后的密码
      name: '系统管理员',
      role: 'admin',
      status: 'active',
      createdBy: 'system'
    });

    await adminUser.save();
    console.log('默认管理员账号创建成功');
    console.log('用户名：admin');
    console.log('密码：123456');
    console.log('请及时修改默认密码！');

  } catch (error) {
    console.error('创建管理员账号失败:', error);
    throw error;
  }
};

/**
 * 初始化数据库
 */
const initDatabase = async () => {
  try {
    // 连接数据库
    const mongoURI = process.env.MONGO_URI;
    if (!mongoURI) {
      throw new Error('数据库连接URI未配置，请检查环境变量MONGO_URI');
    }

    await mongoose.connect(mongoURI, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    });

    console.log('数据库连接成功');

    // 初始化管理员账号
    await initAdminUser();

    console.log('数据库初始化完成');
    process.exit(0);

  } catch (error) {
    console.error('数据库初始化失败:', error);
    process.exit(1);
  }
};

// 运行初始化
initDatabase();